package day5.homework;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

//使用反射获取String类的所有方法名  并且 打印方法总数  同时 还要显示按字母排序后的前5个方法名
public class StringReflect {
    public static void main(String[] args) {
        fun2();
    }
    public static void fun1(){
        Class c = String.class;
        Method[] ms = c.getDeclaredMethods();
        int nums = 0;
        for (Method m : ms) {
            if (m!=null){
                nums++;
            }
        }
        String[] strings = new String[nums];
        for (int i = 0; i < nums; i++) {
            strings[i] = ms[i].getName();
            strings[i] += Arrays.toString(ms[i].getParameterTypes());
        }
        Arrays.sort(strings);
        System.out.println("方法总数:"+nums);
        System.out.println("前5个方法名：");
        for (int i = 0; i < 5; i++) {
            System.out.println(strings[i]);
        }
    }
    public static void fun2(){
        Class c = String.class;
        Method[] ms = c.getDeclaredMethods();
        System.out.println("总数:"+ms.length);
        List<String> list = new ArrayList<>();
        for (Method m :ms){
            list.add(m.getName());
        }
        Collections.sort(list);
        for (int i = 0; i < 5; i++) {
            System.out.println(list.get(i));
        }
        //比较器对象：comparator 目的是用于告诉集合或数组
        //按照什么属性进行排序 基本类型和String类型一般都可以默认排序
        //Comparator==> int compare(T o1,T o2)
        //返回值int用于比较大小 >0 <0 =0 来决定o1和o2的大小
//        Comparable<Method> com=(o1,o2)->{
//            return o1.getName().compareTo(o2.getName());
//        };
        //Arrays.sort(ms);
    }
}
//自定义泛型
class My<A>{
    //类型 参数 不确定   还想统一规范
    public void test(A a,A a2){

    }
    public static void main(String[] args) {
        My<String> m = new My();
    }
}